﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Xml.Serialization;

namespace UniCT.LinkShareWpf.Model
{
    // La decorazione [DataContract]: si tratta di un oggetto che viene utilizzato all'interno del contratto
    // (definisce metodi e oggetti scambiati nella comunicazione). 
    // Questo perché potrebbero esserci dei campi che nella comunicazione non interessano:
    // in quel caso, se non si mette la decorazione DataMember essi non vengono presi in considerazione. 
    // XmlRoot è applicato solo alla classe che quando serializzata rappresenta l'elemento di apertura e chiusura dell'xml
    [DataContract]
    [Serializable]
    [XmlRoot("Resource")]
    public class Resource
    {
        // DataMember indica le proprietà o i campi che vogliamo serializzare
        [DataMember]
        private TechnicalInfo tInfo;
        [DataMember]
        private ContentInfo cInfo;
        [DataMember]
        private double rating;
        [DataMember]
        private string url;
      
        public Resource()
        {
            tInfo = new TechnicalInfo();
            cInfo = new ContentInfo();
            rating = 0;
            url = string.Empty;
        }
        
        public Resource(Resource res)
        {
            tInfo = res.TInfo;
            cInfo = res.CInfo;
            rating = res.Rating;
            url = res.Url;
        }

        public Resource(TechnicalInfo tInfo, ContentInfoTVS cInfo)
        {
            this.tInfo = tInfo;
            this.cInfo = cInfo;
        }

        public Resource(TechnicalInfo tInfo, ContentInfo cInfo)
        {
            this.tInfo = tInfo;
            this.cInfo = cInfo;
        }

        public ContentInfo CInfo
        {
            get { return cInfo; }
            set { cInfo = value; }
        }

        public TechnicalInfo TInfo
        {
            get { return tInfo; }
            set { tInfo = value; }
        }

        public double Rating
        {
            get { return rating; }
            set { rating = value; }
        }

        public string Url
        {
            get { return url; }
            set { url = value; }
        }

    }

}